////////////////////////////////////////////////////////////////////////////////
// Auteur	: Maxime Vanier et Patrick Losier
// date		: 04/03/2013
//
// description : Classe qui execute les differents algorithmes
///////////////////////////////////////////////////////////////////////////////	
#ifndef _EXECUTOR_H_
#define _EXECUTOR_H_

#include <vector>
#include <map>
#include <string>

class Resultat;
class BTS;
class Algo;

class Executor
{
public:
	// Constructeur/Destructeur
	Executor(std::vector<std::string>& echantillons);
	~Executor();

	void setVorace(bool value);
	void setDynamique(bool value);
	void setBranchAndBound(bool value);

	void RunAll();

	void printCSV();

	bool extraireInfo(std::string& file);

private:
	// Utilisation de l'algo vorace
	bool vorace_;
	// Utilisation de l'algo dynamique
	bool dynamique_;
	// Utilisation de l'algo Branch And Bound
	bool branchAndBound_;

	// Algorithmes a utiliser
	std::vector<Algo*> algoToUse_;

	// Liste des resultats
	std::vector<Resultat*> resultats_;

	// Liste des villes a traiter
	std::vector<std::string> nomEchantillons_;

	// Ville courante
	std::map<int, BTS*> villeCourante_;
	void clearVilleCourante();
	BTS* extractBTS(std::string& strBTS);

	// Capacite courante
	int capaciteCourante_;

	static int rapportCourant_;


};

#endif //_EXECUTOR_H_
